ss-local+privoxy 代理

[TOC]

简介

ss-local 是 shadowsocks 的本地 socks5 服务器,因此,如果需要使用 ss-local 提供的 socks5 代理,就必须让应用程序使用 socks5 协议与之通信。但是很可惜,除了部分浏览器、软件直接支持 socks5 协议外,其它的都只支持 http 代理。因此,我们需要借助 privoxy 来将 http 代理协议转换为 socks5 代理协议,与后端的 ss-local 进行通信。

相关说明

shadowsocks两种使用姿势:

  • ss-local+privoxy:使用 privoxy 作为前端的 http 代理(支持 CONNECT),可选择全局、gfwlist 两种方式;
  • ss-redir+iptables:支持代理所有 TCP、UDP 流量(本机 UDP 除外),可选择全局、绕过大陆地址两种方式

今天我们要说的是第一种姿势,即ss-local + privoxy;第二种姿势可以前往ss-redir 透明代理

这两种方式的主要区别在于:gfwlist绕过大陆地址

  • gfwlist:gfwlist 就是一个包含了几乎所有被墙域名的列表,因此,使用这种模式只会让被墙的网站走代理;但是很多国外没被墙的域名还是走的直连,因此访问国外未墙网站的时候速度依旧很慢,甚至出现连接超时的情况;
  • 绕过大陆地址:顾名思义,只有发往大陆地址的流量不会走代理,其它的不管有没有被墙,统统走代理上网;这样就不会出现 gfwlist 模式的国外未墙网站访问慢的问题了。我个人建议使用这种模式。

当然,对于 gfwlist 模式出现的问题也不是没有解决办法,我们只需把要走代理的网站添加至 privoxy 规则文件,一样可以走代理。

ss-local篇(客户端)

安装

1
2
3
4
# CentOS RHEL
yum -y install epel-release
yum -y install python-pip
pip install shadowsocks

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vim /etc/shadowsocks.json
{
"server": "1.2.3.4",
"server_port": 8989,
"method": "aes-128-cfb",
"password": "123456",
"fast_open": false,
"local_address": "127.0.0.1",
"local_port": 1080,
"workers": 2
}

## 配置说明:
{
"server": "1.2.3.4", # 服务器IP
"server_port": 8989, # 服务器Port
"method": "aes-128-cfb", # 加密方式
"password": "123456", # 端口密码
"fast_open": false, # tcp_fastopen
"local_address": "127.0.0.1", # 本地监听IP
"local_port": 1080, # 本地监听Port
"workers": 2 # worker进程数量
}

运行

1
sslocal -c /etc/shadowsocks.json -d start

停止

1
sslocal -c /etc/shadowsocks.json -d stop

privoxy篇

安装

1
yum -y install privoxy

全局模式

全局模式是最简单最粗暴的,即:所有流量都走 ss-local,不区分什么国内国外。
因此请你确定否需要这种模式,如果不需要,请跳过此段,直接到 -gfwlist模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
### 新建 whitelist.action 白名单文件
--- /etc/privoxy/whitelist.action ---
{{alias}}
# 代理(socks5)
socks5 = +forward-override{forward-socks5 127.0.0.1:1080 .}
# 直连
direct = +forward-override{forward .}

# 所有网站走代理
{socks5}
/

# 以下网站走直连
{direct}
.ip.cn
.chinaz.com
--- /etc/privoxy/whitelist.action ---

### 加载 whitelist.action 文件
echo 'actionsfile whitelist.action' >> /etc/privoxy/config

### 启动 privoxy.service 服务
systemctl start privoxy.service
systemctl -l status privoxy.service

gfwlist 是由 AutoProxy 官方维护,由众多网民收集整理的一个中国大陆防火长城的屏蔽列表;
因为这是 Firefox 浏览器直接使用的一种格式,因此,如果需要用在 privoxy 上就需要进行转换;
这里我提供一个 shell 转换脚本,除了正则语法无法自动处理外,其它的基本 OK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
### 获取 gfwlist2privoxy 脚本
curl -skL https://raw.github.com/zfl9/gfwlist2privoxy/master/gfwlist2privoxy -o gfwlist2privoxy

### 生成 gfwlist.action 文件
bash gfwlist2privoxy '127.0.0.1:1080'

### 拷贝至 privoxy 配置目录
cp -af gfwlist.action /etc/privoxy/

### 加载 gfwlist.action 文件
echo 'actionsfile gfwlist.action' >> /etc/privoxy/config

### 启动 privoxy.service 服务
systemctl start privoxy.service
systemctl -l status privoxy.service

环境变量

1
2
3
4
5
6
7
8
9
10
# privoxy 默认监听端口为 8118
proxy="http://127.0.0.1:8118"
export http_proxy=$proxy
export https_proxy=$proxy
export no_proxy="localhost, 127.0.0.1, ::1, ip.cn, chinaz.com"

# no_proxy 环境变量是指不经过 privoxy 代理的地址或域名
# 只能填写具体的 IP、域名后缀,多个条目之间使用 ',' 逗号隔开
# 比如: export no_proxy="localhost, 192.168.1.1, ip.cn, chinaz.com"
# 访问 localhost、192.168.1.1、ip.cn、*.ip.cn、chinaz.com、*.chinaz.com 将不使用代理

代理测试

1
2
3
4
5
6
7
8
9
10
11
# 访问各大网站,若均有网页源码输出则配置成功
curl -sL www.baidu.com
curl -sL www.google.com
curl -sL www.google.com.hk
curl -sL www.google.co.jp
curl -sL www.youtube.com
curl -sL www.facebook.com
curl -sL www.wikipedia.org

# 获取当前 IP 地址,应该显示本机 IP
curl -sL ip.chinaz.com/getip.aspx

shell脚本

因为每次都需要繁琐的设置 proxy 环境变量,因此这里提供一个简陋的 ss-privoxy 脚本,用于一键启用、关闭代理

新建ss-privoxy文件,chmod +x ss-privoxycp -af ss-privoxy /usr/local/bin/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

case $1 in
start)
nohup sslocal -c /etc/ss-local.json < /dev/null &>> /var/log/ss-local.log &
systemctl start privoxy
proxy="http://127.0.0.1:8118"
export http_proxy=$proxy
export https_proxy=$proxy
export no_proxy="localhost, 127.0.0.1, ::1, ip.cn, chinaz.com"
;;
stop)
unset http_proxy https_proxy no_proxy
systemctl stop privoxy
pkill sslocal
;;
reload)
pkill sslocal
nohup sslocal -c /etc/ss-local.json < /dev/null &>> /var/log/ss-local.log &
;;
set)
proxy="http://127.0.0.1:8118"
export http_proxy=$proxy
export https_proxy=$proxy
export no_proxy="localhost, 127.0.0.1, ::1, ip.cn, chinaz.com"
;;
unset)
unset http_proxy https_proxy no_proxy
;;
*)
echo "usage: source $0 start|stop|reload|set|unset"
exit 1
;;
esac
--------------------本文结束,感谢您的阅读--------------------

本文标题:ss-local+privoxy 代理

文章作者:弓昭

发布时间:2018年12月24日 - 20:22

最后更新:2020年04月08日 - 22:20

原始链接:https://gongzhao1.gitee.io/ss-local+privoxy 代理/

联系邮箱:gongzhao1@foxmail.com